తెలుగు

నెక్స్ట్.js 14 సర్వర్ యాక్షన్స్ కోసం ఒక సమగ్ర గైడ్, ఇది ఫార్మ్ హ్యాండ్లింగ్ ఉత్తమ పద్ధతులు, డేటా వాలిడేషన్, భద్రతాపరమైన అంశాలు, మరియు ఆధునిక వెబ్ అప్లికేషన్‌లను రూపొందించడానికి అధునాతన టెక్నిక్‌లను వివరిస్తుంది.

నెక్స్ట్.js 14 సర్వర్ యాక్షన్స్: ఫార్మ్ హ్యాండ్లింగ్ ఉత్తమ పద్ధతులలో నైపుణ్యం

నెక్స్ట్.js 14 పనితీరుగల మరియు వినియోగదారు-స్నేహపూర్వక వెబ్ అప్లికేషన్‌లను రూపొందించడానికి శక్తివంతమైన ఫీచర్‌లను పరిచయం చేస్తుంది. వీటిలో, సర్వర్ యాక్షన్స్ ఫార్మ్ సబ్మిషన్లు మరియు డేటా మ్యూటేషన్లను సర్వర్‌లోనే నేరుగా నిర్వహించడానికి ఒక పరివర్తనాత్మక మార్గంగా నిలుస్తాయి. ఈ గైడ్ నెక్స్ట్.js 14లో సర్వర్ యాక్షన్స్ గురించి ఒక సమగ్ర అవలోకనాన్ని అందిస్తుంది, ఫార్మ్ హ్యాండ్లింగ్, డేటా వాలిడేషన్, భద్రత మరియు అధునాతన టెక్నిక్‌ల కోసం ఉత్తమ పద్ధతులపై దృష్టి పెడుతుంది. మేము ఆచరణాత్మక ఉదాహరణలను అన్వేషిస్తాము మరియు దృఢమైన మరియు స్కేలబుల్ వెబ్ అప్లికేషన్‌లను రూపొందించడంలో మీకు సహాయపడటానికి కార్యాచరణ అంతర్దృష్టులను అందిస్తాము.

నెక్స్ట్.js సర్వర్ యాక్షన్స్ అంటే ఏమిటి?

సర్వర్ యాక్షన్స్ అనేవి సర్వర్‌లో రన్ అయ్యే అసింక్రోనస్ ఫంక్షన్‌లు మరియు వీటిని రియాక్ట్ కాంపోనెంట్‌ల నుండి నేరుగా పిలవవచ్చు. అవి ఫార్మ్ సబ్మిషన్లు మరియు డేటా మ్యూటేషన్లను నిర్వహించడానికి సాంప్రదాయ API రూట్‌ల అవసరాన్ని తొలగిస్తాయి, దీని ఫలితంగా కోడ్ సరళీకృతం అవుతుంది, భద్రత మెరుగుపడుతుంది మరియు పనితీరు పెరుగుతుంది. సర్వర్ యాక్షన్స్ రియాక్ట్ సర్వర్ కాంపోనెంట్స్ (RSCs), అంటే అవి సర్వర్‌లో ఎగ్జిక్యూట్ చేయబడతాయి, దీనివల్ల వేగవంతమైన ప్రారంభ పేజీ లోడ్‌లు మరియు మెరుగైన SEO లభిస్తాయి.

సర్వర్ యాక్షన్స్ యొక్క ముఖ్య ప్రయోజనాలు:

మీ నెక్స్ట్.js 14 ప్రాజెక్ట్‌ను సెటప్ చేయడం

సర్వర్ యాక్షన్‌లలోకి ప్రవేశించే ముందు, మీరు నెక్స్ట్.js 14 ప్రాజెక్ట్‌ను సెటప్ చేశారని నిర్ధారించుకోండి. మీరు కొత్తగా ప్రారంభిస్తుంటే, కింది కమాండ్‌ను ఉపయోగించి కొత్త ప్రాజెక్ట్‌ను సృష్టించండి:

npx create-next-app@latest my-next-app

సర్వర్ కాంపోనెంట్స్ మరియు యాక్షన్‌లను పూర్తిగా ఉపయోగించుకోవడానికి మీ ప్రాజెక్ట్ app డైరెక్టరీ నిర్మాణాన్ని ఉపయోగిస్తోందని నిర్ధారించుకోండి.

సర్వర్ యాక్షన్‌లతో ప్రాథమిక ఫార్మ్ హ్యాండ్లింగ్

ఒక సాధారణ ఉదాహరణతో ప్రారంభిద్దాం: డేటాబేస్‌లో కొత్త ఐటెమ్‌ను సృష్టించడానికి డేటాను సమర్పించే ఫార్మ్. మేము ఒక ఇన్‌పుట్ ఫీల్డ్ మరియు సబ్మిట్ బటన్‌తో కూడిన ఒక సాధారణ ఫార్మ్‌ను ఉపయోగిస్తాము.

ఉదాహరణ: కొత్త ఐటెమ్‌ను సృష్టించడం

మొదట, మీ రియాక్ట్ కాంపోనెంట్‌లో సర్వర్ యాక్షన్ ఫంక్షన్‌ను నిర్వచించండి. ఈ ఫంక్షన్ సర్వర్‌లో ఫార్మ్ సబ్మిషన్ లాజిక్‌ను నిర్వహిస్తుంది.

// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';

async function createItem(formData: FormData) {
  'use server'

  const name = formData.get('name') as string;

  // డేటాబేస్ ఇంటరాక్షన్‌ను అనుకరించండి
  console.log('ఐటెమ్‌ను సృష్టిస్తోంది:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // లేటెన్సీని అనుకరించండి

  console.log('ఐటెమ్ విజయవంతంగా సృష్టించబడింది!');
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    await createItem(formData);
    setIsSubmitting(false);
  }

  return (
    
); }

వివరణ:

డేటా వాలిడేషన్

డేటా సమగ్రతను నిర్ధారించడానికి మరియు భద్రతా దుర్బలత్వాలను నివారించడానికి డేటా వాలిడేషన్ చాలా ముఖ్యం. సర్వర్ యాక్షన్స్ సర్వర్-సైడ్ వాలిడేషన్ చేయడానికి ఒక అద్భుతమైన అవకాశాన్ని అందిస్తాయి. ఈ విధానం క్లయింట్-సైడ్ వాలిడేషన్‌తో మాత్రమే సంబంధం ఉన్న నష్టాలను తగ్గించడంలో సహాయపడుతుంది.

ఉదాహరణ: ఇన్‌పుట్ డేటాను ధృవీకరించడం

వాలిడేషన్ లాజిక్‌ను చేర్చడానికి createItem సర్వర్ యాక్షన్‌ను సవరించండి.

// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';

async function createItem(formData: FormData) {
  'use server'

  const name = formData.get('name') as string;

  if (!name || name.length < 3) {
    throw new Error('ఐటెమ్ పేరు కనీసం 3 అక్షరాలు ఉండాలి.');
  }

  // డేటాబేస్ ఇంటరాక్షన్‌ను అనుకరించండి
  console.log('ఐటెమ్‌ను సృష్టిస్తోంది:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // లేటెన్సీని అనుకరించండి

  console.log('ఐటెమ్ విజయవంతంగా సృష్టించబడింది!');
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);
    try {
      await createItem(formData);
    } catch (error: any) {
      setErrorMessage(error.message || 'ఒక లోపం సంభవించింది.');
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    
{errorMessage &&

{errorMessage}

}
); }

వివరణ:

వాలిడేషన్ లైబ్రరీలను ఉపయోగించడం

మరింత సంక్లిష్టమైన వాలిడేషన్ దృశ్యాల కోసం, ఈ క్రింది వాలిడేషన్ లైబ్రరీలను ఉపయోగించడాన్ని పరిగణించండి:

ఇక్కడ Zod ఉపయోగించి ఒక ఉదాహరణ ఉంది:

// app/utils/validation.ts
import { z } from 'zod';

export const CreateItemSchema = z.object({
  name: z.string().min(3, 'ఐటెమ్ పేరు కనీసం 3 అక్షరాలు ఉండాలి.'),
});
// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';
import { CreateItemSchema } from '../utils/validation';

async function createItem(formData: FormData) {
  'use server'

  const name = formData.get('name') as string;

  const validatedFields = CreateItemSchema.safeParse({ name });

  if (!validatedFields.success) {
    return { errors: validatedFields.error.flatten().fieldErrors };
  }

  // డేటాబేస్ ఇంటరాక్షన్‌ను అనుకరించండి
  console.log('ఐటెమ్‌ను సృష్టిస్తోంది:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // లేటెన్సీని అనుకరించండి

  console.log('ఐటెమ్ విజయవంతంగా సృష్టించబడింది!');
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);
    try {
      await createItem(formData);
    } catch (error: any) {
      setErrorMessage(error.message || 'ఒక లోపం సంభవించింది.');
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    
{errorMessage &&

{errorMessage}

}
); }

వివరణ:

భద్రతాపరమైన అంశాలు

సర్వర్ యాక్షన్స్ సర్వర్‌లో కోడ్‌ను ఎగ్జిక్యూట్ చేయడం ద్వారా భద్రతను పెంచుతాయి, కానీ మీ అప్లికేషన్‌ను సాధారణ బెదిరింపుల నుండి రక్షించడానికి భద్రతా ఉత్తమ పద్ధతులను అనుసరించడం ఇప్పటికీ చాలా ముఖ్యం.

క్రాస్-సైట్ రిక్వెస్ట్ ఫోర్జరీ (CSRF) నివారణ

CSRF దాడులు ఒక వెబ్‌సైట్ వినియోగదారు బ్రౌజర్‌లో ఉన్న నమ్మకాన్ని దోపిడీ చేస్తాయి. CSRF దాడులను నివారించడానికి, CSRF రక్షణ యంత్రాంగాలను అమలు చేయండి.

సర్వర్ యాక్షన్‌లను ఉపయోగిస్తున్నప్పుడు Next.js స్వయంచాలకంగా CSRF రక్షణను నిర్వహిస్తుంది. ఫ్రేమ్‌వర్క్ ప్రతి ఫార్మ్ సబ్మిషన్ కోసం ఒక CSRF టోకెన్‌ను ఉత్పత్తి చేసి, ధృవీకరిస్తుంది, అభ్యర్థన మీ అప్లికేషన్ నుండే వచ్చిందని నిర్ధారిస్తుంది.

వినియోగదారు ప్రామాణీకరణ మరియు అధికార నిర్వహణ

అధీకృత వినియోగదారులు మాత్రమే నిర్దిష్ట చర్యలను చేయగలరని నిర్ధారించుకోండి. సున్నితమైన డేటా మరియు ఫంక్షనాలిటీని రక్షించడానికి ప్రామాణీకరణ మరియు అధికార యంత్రాంగాలను అమలు చేయండి.

ఒక సర్వర్ యాక్షన్‌ను రక్షించడానికి NextAuth.js ఉపయోగించి ఇక్కడ ఒక ఉదాహరణ ఉంది:

// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';
import { getServerSession } from 'next-auth';
import { authOptions } from '../../app/api/auth/[...nextauth]/route';

async function createItem(formData: FormData) {
  'use server'

  const session = await getServerSession(authOptions);

  if (!session) {
    throw new Error('అనధికారిక');
  }

  const name = formData.get('name') as string;

  // డేటాబేస్ ఇంటరాక్షన్‌ను అనుకరించండి
  console.log('ఐటెమ్‌ను సృష్టిస్తోంది:', name, 'వినియోగదారు ద్వారా:', session.user?.email);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // లేటెన్సీని అనుకరించండి

  console.log('ఐటెమ్ విజయవంతంగా సృష్టించబడింది!');
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);
    try {
      await createItem(formData);
    } catch (error: any) {
      setErrorMessage(error.message || 'ఒక లోపం సంభవించింది.');
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    
{errorMessage &&

{errorMessage}

}
); }

వివరణ:

ఇన్‌పుట్ డేటాను శానిటైజ్ చేయడం

క్రాస్-సైట్ స్క్రిప్టింగ్ (XSS) దాడులను నివారించడానికి ఇన్‌పుట్ డేటాను శానిటైజ్ చేయండి. XSS దాడులు హానికరమైన కోడ్ ఒక వెబ్‌సైట్‌లోకి ఇంజెక్ట్ చేయబడినప్పుడు సంభవిస్తాయి, ఇది వినియోగదారు డేటా లేదా అప్లికేషన్ ఫంక్షనాలిటీని దెబ్బతీస్తుంది.

మీ సర్వర్ యాక్షన్‌లలో ప్రాసెస్ చేయడానికి ముందు వినియోగదారు అందించిన ఇన్‌పుట్‌ను శానిటైజ్ చేయడానికి DOMPurify లేదా sanitize-html వంటి లైబ్రరీలను ఉపయోగించండి.

అధునాతన టెక్నిక్‌లు

ఇప్పుడు మనం ప్రాథమికాలను కవర్ చేశాము, సర్వర్ యాక్షన్‌లను సమర్థవంతంగా ఉపయోగించడానికి కొన్ని అధునాతన టెక్నిక్‌లను అన్వేషిద్దాం.

ఆశావాద నవీకరణలు (Optimistic Updates)

ఆశావాద నవీకరణలు సర్వర్ నిర్ధారించడానికి ముందే చర్య విజయవంతం అవుతుందని భావించి UIని వెంటనే అప్‌డేట్ చేయడం ద్వారా మెరుగైన వినియోగదారు అనుభవాన్ని అందిస్తాయి. సర్వర్‌లో చర్య విఫలమైతే, UI దాని మునుపటి స్థితికి తిరిగి వస్తుంది.

// app/components/UpdateItemForm.tsx
'use client';

import { useState } from 'react';

async function updateItem(id: string, formData: FormData) {
  'use server'

  const name = formData.get('name') as string;

  // డేటాబేస్ ఇంటరాక్షన్‌ను అనుకరించండి
  console.log('ఐటెమ్‌ను అప్‌డేట్ చేస్తోంది:', id, 'కొత్త పేరుతో:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // లేటెన్సీని అనుకరించండి

  // వైఫల్యాన్ని అనుకరించండి (ప్రదర్శన ప్రయోజనాల కోసం)
  const shouldFail = Math.random() < 0.5;
  if (shouldFail) {
    throw new Error('ఐటెమ్‌ను అప్‌డేట్ చేయడంలో విఫలమైంది.');
  }

  console.log('ఐటెమ్ విజయవంతంగా అప్‌డేట్ చేయబడింది!');
  return { name }; // అప్‌డేట్ చేయబడిన పేరును తిరిగి ఇవ్వండి
}

export default function UpdateItemForm({ id, initialName }: { id: string; initialName: string }) {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  const [itemName, setItemName] = useState(initialName);

  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);

    // ఆశావాదంగా UIని అప్‌డేట్ చేయండి
    const newName = formData.get('name') as string;
    setItemName(newName);

    try {
      const result = await updateItem(id, formData);
      //విజయవంతమైతే, అప్‌డేట్ ఇప్పటికే setItemName ద్వారా UIలో ప్రతిబింబిస్తుంది

    } catch (error: any) {
      setErrorMessage(error.message || 'ఒక లోపం సంభవించింది.');
      // లోపంపై UIని తిరిగి మార్చండి
      setItemName(initialName);
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    

ప్రస్తుత పేరు: {itemName}

{errorMessage &&

{errorMessage}

}
); }

వివరణ:

డేటాను రీవాలిడేట్ చేయడం

ఒక సర్వర్ యాక్షన్ డేటాను సవరించిన తర్వాత, UI తాజా మార్పులను ప్రతిబింబిస్తుందని నిర్ధారించుకోవడానికి మీరు కాష్ చేయబడిన డేటాను రీవాలిడేట్ చేయాల్సి రావచ్చు. Next.js డేటాను రీవాలిడేట్ చేయడానికి అనేక మార్గాలను అందిస్తుంది:

కొత్త ఐటెమ్‌ను సృష్టించిన తర్వాత ఒక పాత్‌ను రీవాలిడేట్ చేయడానికి ఇక్కడ ఒక ఉదాహరణ ఉంది:

// app/components/CreateItemForm.tsx
'use client';

import { useState } from 'react';
import { revalidatePath } from 'next/cache';

async function createItem(formData: FormData) {
  'use server'

  const name = formData.get('name') as string;

  // డేటాబేస్ ఇంటరాక్షన్‌ను అనుకరించండి
  console.log('ఐటెమ్‌ను సృష్టిస్తోంది:', name);

  await new Promise((resolve) => setTimeout(resolve, 1000)); // లేటెన్సీని అనుకరించండి

  console.log('ఐటెమ్ విజయవంతంగా సృష్టించబడింది!');

  revalidatePath('/items'); // /items పాత్‌ను రీవాలిడేట్ చేయండి
}

export default function CreateItemForm() {
  const [isSubmitting, setIsSubmitting] = useState(false);
  const [errorMessage, setErrorMessage] = useState(null);
  
  async function handleSubmit(formData: FormData) {
    setIsSubmitting(true);
    setErrorMessage(null);
    try {
      await createItem(formData);
    } catch (error: any) {
      setErrorMessage(error.message || 'ఒక లోపం సంభవించింది.');
    } finally {
      setIsSubmitting(false);
    }
  }

  return (
    
{errorMessage &&

{errorMessage}

}
); }

వివరణ:

సర్వర్ యాక్షన్‌ల కోసం ఉత్తమ పద్ధతులు

సర్వర్ యాక్షన్‌ల ప్రయోజనాలను గరిష్టంగా పెంచుకోవడానికి, ఈ క్రింది ఉత్తమ పద్ధతులను పరిగణించండి:

సాధారణ ఆపదలు మరియు వాటిని ఎలా నివారించాలి

సర్వర్ యాక్షన్‌లు అనేక ప్రయోజనాలను అందించినప్పటికీ, తెలుసుకోవలసిన కొన్ని సాధారణ ఆపదలు ఉన్నాయి:

ముగింపు

నెక్స్ట్.js 14 సర్వర్ యాక్షన్స్ ఫార్మ్ సబ్మిషన్లు మరియు డేటా మ్యూటేషన్లను సర్వర్‌లో నేరుగా నిర్వహించడానికి శక్తివంతమైన మరియు సమర్థవంతమైన మార్గాన్ని అందిస్తాయి. ఈ గైడ్‌లో వివరించిన ఉత్తమ పద్ధతులను అనుసరించడం ద్వారా, మీరు దృఢమైన, సురక్షితమైన మరియు పనితీరుగల వెబ్ అప్లికేషన్‌లను రూపొందించవచ్చు. మీ కోడ్‌ను సరళీకృతం చేయడానికి, భద్రతను మెరుగుపరచడానికి మరియు మొత్తం వినియోగదారు అనుభవాన్ని మెరుగుపరచడానికి సర్వర్ యాక్షన్‌లను స్వీకరించండి. మీరు ఈ సూత్రాలను ఏకీకృతం చేస్తున్నప్పుడు, మీ అభివృద్ధి ఎంపికల యొక్క ప్రపంచ ప్రభావాన్ని పరిగణించండి. మీ ఫార్మ్‌లు మరియు డేటా హ్యాండ్లింగ్ ప్రక్రియలు విభిన్న అంతర్జాతీయ ప్రేక్షకుల కోసం అందుబాటులో, సురక్షితంగా మరియు వినియోగదారు-స్నేహపూర్వకంగా ఉన్నాయని నిర్ధారించుకోండి. ఈ చేరికకు నిబద్ధత మీ అప్లికేషన్ యొక్క వినియోగాన్ని మెరుగుపరచడమే కాకుండా, ప్రపంచ స్థాయిలో దాని పరిధిని మరియు ప్రభావాన్ని విస్తృతం చేస్తుంది.